package org.simplespringframework.aop.aspect;

import java.lang.reflect.Method;

/**
 * @BelongsProject: simpleframework
 * @BelongsPackage: org.simplespringframework.aop.aspect
 * @Author: xshang
 * @CreateTime: 2023-06-27  14:57
 * @Description: TODO
 * @Version: 1.0
 */
public abstract class DefaultAspect {

    /**
     * 执行前拦截
     * @param targetClass 被代理的目标类
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法参数列表
     */
    public void before(Class<?> targetClass, Method method,Object[] args) throws Throwable{

    }

    /**
     * 执行后拦截
     * @param targetClass 被代理的目标类
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法参数列表
     * @param returnValue 被代理的目标方法执行后的返回值
     */
    public Object afterReturning(Class<?> targetClass, Method method,Object[] args, Object returnValue) throws Throwable {
        return returnValue;
    }

    /**
     * 异常后执行
     * @param targetClass 被代理的目标类
     * @param method 被代理的目标方法
     * @param args 被代理的目标方法参数列表
     * @param throwable 被代理方法抛出的异常
     */
    public void afterThrowing(Class<?> targetClass, Method method,Object[] args, Throwable throwable) throws Throwable {

    }
}
